package gestion.camping.vue;

import gestion.camping.controleur.EmplacementController;
import gestion.camping.dto.Emplacement;
import gestion.camping.dto.Secteur;
import gestion.camping.dto.TypeTerrain;
import gestion.camping.utils.MessagesUtil;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class ViewEmplacementDetail extends JDialog implements ActionListener{
	/**
	 * 
	 */
	private static final long serialVersionUID = -17760458983364266L;

	
	private JButton btnEnregister;
	private JButton btnAnnuler;
	
	private Emplacement emplacement;
	private EmplacementController controller;
	private List<Secteur> listSecteur = new ArrayList<Secteur>();
	private List<TypeTerrain> listTypeTerrain = new ArrayList<TypeTerrain>();

	private JButton btnRetourListe;
	private JTextField textFieldNum;
	private JComboBox comboBoxSecteur;
	private JComboBox comboBoxTypeTerrain;


	/**
	 * Create the frame.
	 */
	public ViewEmplacementDetail(EmplacementController controller) {
	
		this.controller = controller; 
		this.emplacement = controller.getEmplacement();
		
		initCompoment();
		
		setModal(true);
		
		setListSecteur(controller.getListSecteur());
		setListTypeTerrain(controller.getListTypeTerrain());
	}
	

	public void initCompoment(){
	
		
		setBounds(0, 25, 700, 500);
		GridBagLayout gridBagLayout = new GridBagLayout();
		gridBagLayout.columnWidths = new int[]{0,0, 0, 0};
		gridBagLayout.rowHeights = new int[]{40, 40, 25, 25, 25, 25, 25, 25, 25, 25, 25, 0};
		gridBagLayout.columnWeights = new double[]{0.3, 0.0, 1.0, 1.0};
		gridBagLayout.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
		getContentPane().setLayout(gridBagLayout);
		
		
		btnRetourListe = new JButton(MessagesUtil.formatMessage("emplacement.ajout.btn.retour"));
		btnRetourListe.addActionListener(this);
		GridBagConstraints gbc_btnRetourListe = new GridBagConstraints();
		gbc_btnRetourListe.anchor = GridBagConstraints.WEST;
		gbc_btnRetourListe.insets = new Insets(0, 0, 5, 0);
		gbc_btnRetourListe.gridx = 3;
		gbc_btnRetourListe.gridy = 0;
		getContentPane().add(btnRetourListe, gbc_btnRetourListe);
		
		btnEnregister = new JButton(MessagesUtil.formatMessage("emplacement.ajout.btn.enregistrer"));
		btnEnregister.addActionListener(this);
		
		JLabel lblNumro = new JLabel(MessagesUtil.formatMessage("emplacement.ajout.numero"));
		GridBagConstraints gbc_lblNumro = new GridBagConstraints();
		gbc_lblNumro.anchor = GridBagConstraints.EAST;
		gbc_lblNumro.insets = new Insets(0, 0, 5, 5);
		gbc_lblNumro.gridx = 1;
		gbc_lblNumro.gridy = 4;
		getContentPane().add(lblNumro, gbc_lblNumro);
		
		textFieldNum = new JTextField();
		if(emplacement.getId() != 0){
			textFieldNum.setText(String.valueOf(emplacement.getId()));
		}
		textFieldNum.setEnabled(false);
		GridBagConstraints gbc_textFieldNum = new GridBagConstraints();
		gbc_textFieldNum.insets = new Insets(0, 0, 5, 5);
		gbc_textFieldNum.fill = GridBagConstraints.HORIZONTAL;
		gbc_textFieldNum.gridx = 2;
		gbc_textFieldNum.gridy = 4;
		getContentPane().add(textFieldNum, gbc_textFieldNum);
		textFieldNum.setColumns(10);
		
		JLabel lblSecteur = new JLabel(MessagesUtil.formatMessage("emplacement.ajout.secteur"));
		GridBagConstraints gbc_lblSecteur = new GridBagConstraints();
		gbc_lblSecteur.insets = new Insets(0, 0, 5, 5);
		gbc_lblSecteur.anchor = GridBagConstraints.EAST;
		gbc_lblSecteur.gridx = 1;
		gbc_lblSecteur.gridy = 5;
		getContentPane().add(lblSecteur, gbc_lblSecteur);
		
		comboBoxSecteur = new JComboBox();
		GridBagConstraints gbc_comboBoxSecteur = new GridBagConstraints();
		gbc_comboBoxSecteur.insets = new Insets(0, 0, 5, 5);
		gbc_comboBoxSecteur.fill = GridBagConstraints.HORIZONTAL;
		gbc_comboBoxSecteur.gridx = 2;
		gbc_comboBoxSecteur.gridy = 5;
		getContentPane().add(comboBoxSecteur, gbc_comboBoxSecteur);
		
		JLabel lblTypeDeTerrain = new JLabel(MessagesUtil.formatMessage("emplacement.ajout.typeterrain"));
		GridBagConstraints gbc_lblTypeDeTerrain = new GridBagConstraints();
		gbc_lblTypeDeTerrain.anchor = GridBagConstraints.EAST;
		gbc_lblTypeDeTerrain.insets = new Insets(0, 0, 5, 5);
		gbc_lblTypeDeTerrain.gridx = 1;
		gbc_lblTypeDeTerrain.gridy = 6;
		getContentPane().add(lblTypeDeTerrain, gbc_lblTypeDeTerrain);
		
		comboBoxTypeTerrain = new JComboBox();
		GridBagConstraints gbc_comboBoxTypeTerrain = new GridBagConstraints();
		gbc_comboBoxTypeTerrain.insets = new Insets(0, 0, 5, 5);
		gbc_comboBoxTypeTerrain.fill = GridBagConstraints.HORIZONTAL;
		gbc_comboBoxTypeTerrain.gridx = 2;
		gbc_comboBoxTypeTerrain.gridy = 6;
		getContentPane().add(comboBoxTypeTerrain, gbc_comboBoxTypeTerrain);
		GridBagConstraints gbc_btnEnregister = new GridBagConstraints();
		gbc_btnEnregister.anchor = GridBagConstraints.EAST;
		gbc_btnEnregister.insets = new Insets(0, 0, 5, 5);
		gbc_btnEnregister.gridx = 2;
		gbc_btnEnregister.gridy = 10;
		getContentPane().add(btnEnregister, gbc_btnEnregister);
		
		btnAnnuler = new JButton(MessagesUtil.formatMessage("emplacement.ajout.btn.annuler"));
		btnAnnuler.addActionListener(this);
		GridBagConstraints gbc_btnAnnuler = new GridBagConstraints();
		gbc_btnAnnuler.anchor = GridBagConstraints.WEST;
		gbc_btnAnnuler.insets = new Insets(0, 0, 5, 0);
		gbc_btnAnnuler.gridx = 3;
		gbc_btnAnnuler.gridy = 10;
		getContentPane().add(btnAnnuler, gbc_btnAnnuler);
	}
	
	public void update(){	
		
		//Mise à jour de la liste déroulante
	    //Supprime tout les anciens éléments
		comboBoxSecteur.removeAllItems();
		
		// On insère ensuite les nouvelles valeurs
		for(Secteur secteur : listSecteur){
			comboBoxSecteur.addItem(secteur.getLibelle());
		}
		
		//On pr�selectionne l'�l�ment
		int i;
		for(i=0; i < listSecteur.size() && listSecteur.get(i).getId() != emplacement.getSecteur().getId(); i++);
		if(i < listSecteur.size()){
			comboBoxSecteur.setSelectedIndex(i);
		}
		
		//Mise à jour de la liste déroulante
	    //Supprime tout les anciens éléments
		comboBoxTypeTerrain.removeAllItems();
		
		// On insère ensuite les nouvelles valeurs
		for(TypeTerrain typeTerrain : listTypeTerrain){
			comboBoxTypeTerrain.addItem(typeTerrain.getLibelle());
		}
		
		//On pr�selectionne l'�l�ment
		for(i=0; i < listTypeTerrain.size() && listTypeTerrain.get(i).getId() != emplacement.getTypeTerrain().getId(); i++);
		if(i < listTypeTerrain.size()){
			comboBoxTypeTerrain.setSelectedIndex(i);
		}
		
		if(emplacement.getId() != 0){
			textFieldNum.setText(String.valueOf(emplacement.getId()));
		}
		
		this.repaint();
	}

	public Emplacement getEmplacement() {
		return emplacement;
	}

	public void setEmplacement(Emplacement emplacement) {
		this.emplacement = emplacement;		
		update();
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		
		emplacement.setSecteur(listSecteur.get(comboBoxSecteur.getSelectedIndex()));
		emplacement.setTypeTerrain(listTypeTerrain.get(comboBoxTypeTerrain.getSelectedIndex()));
		
		if(e.getSource() == this.btnEnregister){
			controller.enregistrer(emplacement);
		}else if(e.getSource() == this.btnAnnuler){
			update();
		}else if(e.getSource() == this.btnRetourListe){		
			this.dispose();
			controller.retour();
		}
	}

	public List<Secteur> getListSecteur() {
		return listSecteur;
	}

	public void setListSecteur(List<Secteur> listSecteur) {
		this.listSecteur = listSecteur;
		
		update();
	}

	public void setListTypeTerrain(List<TypeTerrain> listTypeTerrain) {
		this.listTypeTerrain = listTypeTerrain;
		
		update();
	}
		
}
